#include <iostream>
using namespace std;

class Base {
public:
	virtual int cal (int x, int y)
	{
		return x + y;
	}
	
	//void func (Base *this) {
	//this指向调用对象, 指向子类对象的基类指针
	//如果fun函数调用是子类，那么this指针就是一个指向子类
	//对象的一个基类指针, 通过它去调用可以产生多态的语法
	virtual void fun (void) {
		cout << this->cal(100, 200) << endl;
	} 
};
class Derived:public Base{
public:
	int cal (int x, int y)
	{
		return x * y;
	}
	void fun (void) {
		cout << cal(100, 200) << endl;
	} 
};

int main (void)
{
	Derived d;
	//Base *pb = &d;
	Base b = d;//不是向上造型
	cout << b.cal(100, 200) << endl;
	d.fun();
	return 0;
}
